技术改变世界,文化改变人心

Vwins2.0 SQL注入漏洞分析

0x01 漏洞利用条件

后台管理员开放注册

0x02 漏洞利用

注入点在用户名处

我们构造payload:flight' and extractvalue(1,(select user()))#

可以看到我们成功执行了payload,因为前端有跳转,所以我们使用burp抓包来进行攻击

0x02 漏洞分析

Vwins2.0是用CI框架搭建的,在入口文件处有着全局的过滤函数,在include config.php的时候也同时include了全局过滤类safe.php

我们看一下safe.php中的过滤

可以看到过滤了很多函数,但是好像报错函数并没有被过滤

_construct函数中调用了本类的init()方法,我们看一下都对哪里传来的参数进行了过滤

对来自GET,POST,COOKIE,referer的信息进行了过滤

本次注入漏洞的利用点在注册用户处,因为全局过滤函数的并没有考虑到报错注入的问题,导致了漏洞的发生

根据路由我们可以定位到进行注册的函数

函数获取到post传入的username(注意:username在最开始就已经被过滤一次了,而且还过滤了一次xss,但是不影响sql执行),将其存在$_arr['username']中,我们继续跟踪username,发现在117行调用了了ddb的get_total方法,跟踪这个方法

发现在94行进行了sql的拼接,进入where_preg

最后拼接后的sql语句为:SELECT COUNT(*) AS num FROM es_users WHERE 'username' = 'flight'

因为union select被过滤,我们可以使用extractvalue来报错注入,即可构造payload:flight' and extractvalue(1,(select user()))#